From 8abddb00d75802c9b64882256a1d77623844139c Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Tue, 7 Mar 2023 13:32:44 -0700 Subject: [PATCH] don't create fictious course and speed values. (#1031) We compute coures and speed in track_recompute, which is used by the kml and gtrnctr writers. We also compute these in the track filter with the course speed options. Both of these algorithums compute the course and speed for a point based on the time and position of that point and a previous point. Given that no information from the future is used, the course and speed of the first point cannot be determined. This PR introduces a change so a fictious value for the first point is not generated. --- reference/LineStyles.kml | 12 ---- reference/earth-expertgps-track.kml | 1 - reference/earth-expertgps.kml | 1 - reference/realtime.kml | 7 +- reference/track/bounds-test-track.kml | 3 - .../track/gpx_garmin_extensions-kml_track.kml | 1 - reference/track/segmented_tracks-track.kml | 3 - reference/track/segmented_tracks.kml | 2 - reference/track/trackfilter_merge~gpx.gpx | 1 - reference/track/trackfilter_trk2seg~gpx.gpx | 2 - reference/track/tracks~gpx.kml | 1 - reference/track/utm_subsecond_track~csv.csv | 2 +- route.cc | 67 +++++++++---------- trackfilter.cc | 6 +- 14 files changed, 37 insertions(+), 72 deletions(-) diff --git a/reference/LineStyles.kml b/reference/LineStyles.kml index 6b1053929..7ba1f585d 100644 --- a/reference/LineStyles.kml +++ b/reference/LineStyles.kml @@ -211,7 +211,6 @@ -
Longitude: -122.292646
Latitude: 37.524989
Heading: 312.3
]]> @@ -1752,7 +1751,6 @@ -
Longitude: -122.292093
Latitude: 37.520199
Heading: 312.3
]]> @@ -3230,7 +3228,6 @@ -
Longitude: -122.291970
Latitude: 37.515653
Heading: 312.2
]]> @@ -4792,7 +4789,6 @@ -
Longitude: -122.291356
Latitude: 37.510277
Heading: 312.2
]]> @@ -6270,7 +6266,6 @@ -
Longitude: -122.292584
Latitude: 37.528654
Heading: 312.3
]]> @@ -7727,7 +7722,6 @@ -
Longitude: -122.292277
Latitude: 37.530854
Heading: 312.3
]]> @@ -9394,7 +9388,6 @@ -
Longitude: -122.292032
Latitude: 37.533444
Heading: 312.3
]]> @@ -11166,7 +11159,6 @@ -
Longitude: -122.291663
Latitude: 37.535986
Heading: 312.3
]]> @@ -12938,7 +12930,6 @@ -
Longitude: -122.291541
Latitude: 37.538136
Heading: 312.3
]]> @@ -14584,7 +14575,6 @@ -
Longitude: -122.291847
Latitude: 37.517951
Heading: 312.2
]]> @@ -16188,7 +16178,6 @@ -
Longitude: -122.291111
Latitude: 37.513161
Heading: 312.2
]]> @@ -17792,7 +17781,6 @@ -
Longitude: -122.261028
Latitude: 37.507931
Heading: 312.2
]]> diff --git a/reference/earth-expertgps-track.kml b/reference/earth-expertgps-track.kml index 1cdd39178..d19e9993b 100644 --- a/reference/earth-expertgps-track.kml +++ b/reference/earth-expertgps-track.kml @@ -1197,7 +1197,6 @@ Longitude: -91.610350 Latitude: 30.062183 Altitude: 3.281 ft -Heading: 300.1 Time: 2002-05-25T17:06:21Z ]]> diff --git a/reference/earth-expertgps.kml b/reference/earth-expertgps.kml index cd6ef6b1d..7ae34cba3 100644 --- a/reference/earth-expertgps.kml +++ b/reference/earth-expertgps.kml @@ -1029,7 +1029,6 @@ Longitude: -91.610350 Latitude: 30.062183 Altitude: 3.281 ft -Heading: 300.1 Time: 2002-05-25T17:06:21Z ]]> diff --git a/reference/realtime.kml b/reference/realtime.kml index 94828e2cf..1eb65120f 100644 --- a/reference/realtime.kml +++ b/reference/realtime.kml @@ -324,7 +324,6 @@ Cadence: 245 Heart rate: 25 Power: 88.9 -Heading: 317.9 ]]> @@ -464,7 +463,7 @@ Temperature: 19.8 Depth: 818.2 ft Speed: 65.4 mph -Heading: 25.6 +Heading: 34.9 Time: 1970-01-01T00:00:09.290Z ]]> @@ -704,7 +703,7 @@ Temperature: 23.9 Depth: 2233.7 ft Speed: 125.4 mph -Heading: 50.7 +Heading: 52.9 Time: 1970-01-01T00:00:24.084Z ]]> @@ -790,7 +789,7 @@ Cadence: 40 Depth: 2066.8 ft Speed: 160.6 mph -Heading: 38.0 +Heading: 45.1 Time: 1970-01-01T00:00:31.102Z ]]> diff --git a/reference/track/bounds-test-track.kml b/reference/track/bounds-test-track.kml index 1223fbca9..e9d290b7e 100644 --- a/reference/track/bounds-test-track.kml +++ b/reference/track/bounds-test-track.kml @@ -183,7 +183,6 @@ Longitude: -117.422570 Latitude: 36.339560 Altitude: 1572.507 ft -Heading: 309.7 ]]> @@ -1528,7 +1527,6 @@ Longitude: -117.072030 Latitude: 36.236600 Altitude: 7455.052 ft -Heading: 309.5 ]]> @@ -2320,7 +2318,6 @@ -
Longitude: -116.879080
Latitude: 36.463670
Heading: 309.6
]]> diff --git a/reference/track/gpx_garmin_extensions-kml_track.kml b/reference/track/gpx_garmin_extensions-kml_track.kml index 883ba1061..81236455d 100644 --- a/reference/track/gpx_garmin_extensions-kml_track.kml +++ b/reference/track/gpx_garmin_extensions-kml_track.kml @@ -216,7 +216,6 @@ Altitude: 0.449 ft Cadence: 151 Heart rate: 111 -Heading: 360.0 Time: 2008-08-20T07:04:48Z ]]> diff --git a/reference/track/segmented_tracks-track.kml b/reference/track/segmented_tracks-track.kml index 1e5a27452..13b35c7ae 100644 --- a/reference/track/segmented_tracks-track.kml +++ b/reference/track/segmented_tracks-track.kml @@ -132,7 +132,6 @@ -
Longitude: -86.844140
Latitude: 35.826146
Heading: 305.9
]]> @@ -713,7 +712,6 @@ -
Longitude: -86.844140
Latitude: 35.826146
Heading: 305.9
]]> @@ -1248,7 +1246,6 @@ -
Longitude: -86.844140
Latitude: 35.836146
Heading: 305.9
Time: 2007-07-27T05:24:05Z
]]> diff --git a/reference/track/segmented_tracks.kml b/reference/track/segmented_tracks.kml index e9bf89acd..b61e664f4 100644 --- a/reference/track/segmented_tracks.kml +++ b/reference/track/segmented_tracks.kml @@ -97,7 +97,6 @@ -
Longitude: -86.844140
Latitude: 35.826146
Heading: 305.9
]]> @@ -632,7 +631,6 @@ -
Longitude: -86.844140
Latitude: 35.836146
Heading: 305.9
Time: 2007-07-27T05:24:05Z
]]> diff --git a/reference/track/trackfilter_merge~gpx.gpx b/reference/track/trackfilter_merge~gpx.gpx index ef60c3c13..d19ba712a 100644 --- a/reference/track/trackfilter_merge~gpx.gpx +++ b/reference/track/trackfilter_merge~gpx.gpx @@ -6,7 +6,6 @@ - 0.000000 diff --git a/reference/track/trackfilter_trk2seg~gpx.gpx b/reference/track/trackfilter_trk2seg~gpx.gpx index 107805b54..97af4c44f 100644 --- a/reference/track/trackfilter_trk2seg~gpx.gpx +++ b/reference/track/trackfilter_trk2seg~gpx.gpx @@ -6,7 +6,6 @@ - 0.000000 @@ -28,7 +27,6 @@ - 0.000000 diff --git a/reference/track/tracks~gpx.kml b/reference/track/tracks~gpx.kml index e620d0d2f..b70900094 100644 --- a/reference/track/tracks~gpx.kml +++ b/reference/track/tracks~gpx.kml @@ -806,7 +806,6 @@ Longitude: -91.610350 Latitude: 30.062183 Altitude: 1.000 meters -Heading: 300.1 Time: 2002-05-25T17:06:21.250Z ]]> diff --git a/reference/track/utm_subsecond_track~csv.csv b/reference/track/utm_subsecond_track~csv.csv index 23474f02f..a7cc10ca6 100644 --- a/reference/track/utm_subsecond_track~csv.csv +++ b/reference/track/utm_subsecond_track~csv.csv @@ -1,5 +1,5 @@ No,Latitude,Longitude,Speed,Date,Time -1,0.000000,2.999551,0.00,2010/01/01,00:00:00 +1,0.000000,2.999551,,2010/01/01,00:00:00 2,0.000000,2.999641,50.02,2010/01/01,00:00:00.200 3,0.000000,2.999730,50.02,2010/01/01,00:00:00.400 4,0.000000,2.999820,50.02,2010/01/01,00:00:00.600 diff --git a/route.cc b/route.cc index f7cd571d2..95e6940aa 100644 --- a/route.cc +++ b/route.cc @@ -235,13 +235,11 @@ track_swap(RouteList& other) * Run over all the trackpoints, computing heading (course), speed, and * and so on. * - * If trkdatap is non-null upon entry, a pointer to an allocated collection - * (hopefully interesting) statistics about the track will be placed there. + * return a collection of (hopefully interesting) statistics about the track. */ computed_trkdata track_recompute(const route_head* trk) { - Waypoint first; - const Waypoint* prev = &first; + const Waypoint* prev = nullptr; int tkpt = 0; int pts_hrt = 0; double tot_hrt = 0.0; @@ -251,44 +249,41 @@ computed_trkdata track_recompute(const route_head* trk) double tot_pwr = 0.0; computed_trkdata tdata; -// first.latitude = 0; -// first.longitude = 0; -// first.creation_time = 0; - foreach (Waypoint* thisw, trk->waypoint_list) { - /* - * gcdist and heading want radians, not degrees. - */ - double tlat = RAD(thisw->latitude); - double tlon = RAD(thisw->longitude); - double plat = RAD(prev->latitude); - double plon = RAD(prev->longitude); - thisw->set_course(heading_true_degrees(plat, plon, tlat, tlon)); - double dist = radtometers(gcdist(plat, plon, tlat, tlon)); - - /* - * Avoid that 6300 mile jump as we move from 0,0. - */ - if (plat && plon) { + if (prev != nullptr) { + /* + * gcdist and heading want radians, not degrees. + */ + double tlat = RAD(thisw->latitude); + double tlon = RAD(thisw->longitude); + double plat = RAD(prev->latitude); + double plon = RAD(prev->longitude); + if (!thisw->course_has_value()) { + // Only recompute course if the waypoint + // didn't already have a course. + thisw->set_course(heading_true_degrees(plat, plon, tlat, tlon)); + } + double dist = radtometers(gcdist(plat, plon, tlat, tlon)); tdata.distance_meters += dist; - } - /* - * If we've moved as much as a meter, - * conditionally recompute speeds. - */ - if (!thisw->speed_has_value() && (dist > 1)) { - // Only recompute speed if the waypoint - // didn't already have a speed - if (thisw->GetCreationTime().isValid() && - prev->GetCreationTime().isValid() && - thisw->GetCreationTime() > prev->GetCreationTime()) { - double timed = - prev->GetCreationTime().msecsTo(thisw->GetCreationTime()) / 1000.0; - thisw->set_speed(dist / timed); + /* + * If we've moved as much as a meter, + * conditionally recompute speeds. + */ + if (!thisw->speed_has_value() && (dist > 1)) { + // Only recompute speed if the waypoint + // didn't already have a speed + if (thisw->GetCreationTime().isValid() && + prev->GetCreationTime().isValid() && + thisw->GetCreationTime() > prev->GetCreationTime()) { + double timed = + prev->GetCreationTime().msecsTo(thisw->GetCreationTime()) / 1000.0; + thisw->set_speed(dist / timed); + } } } + if (thisw->speed_has_value()) { if ((!tdata.min_spd) || (thisw->speed_value() < tdata.min_spd)) { tdata.min_spd = thisw->speed_value(); diff --git a/trackfilter.cc b/trackfilter.cc index b1cd3119e..f63b1359c 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -618,12 +618,10 @@ void TrackFilter::trackfilter_synth() } if (first) { if (opt_course) { - // TODO: the course value 0 isn't valid, wouldn't it be better to UNSET course? - wpt->set_course(0); + wpt->reset_course(); } if (opt_speed) { - // TODO: the speed value 0 isn't valid, wouldn't it be better to UNSET speed? - wpt->set_speed(0); + wpt->reset_speed(); } first = false; last_course_lat = wpt->latitude; -- 2.30.2